<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // 作用域
			// JS（es5）中没有块级作用域
			// JS的作用域是词法作用域
		// 什么是变量提升
		f();
		function f() {
			
		}
		// 作用域链
		
		// 如何绘制作用域链
			// 1.先画0级作用域
			// 2.在全局作用域中查找,函数和变量的声明,然后将这些变量和函数,
			// 以小方块的形式放在0级作用域链上
			// 3.从0级作用域中的函数引出1级作用域
			// 4.再去每个1级作用域中查找变量和函数的声明,然后将这些变量和函数
			// 5.以此类推
			
		// 变量的搜索规则
			// 1.首先在使用变量的作用域中进行查找,如果找到了,直接使用
			// 2.如果找不到,就去上一级作用域中进行查找,如果找到了,直接使用
			// 3.如果找不到,继续向上查找,直到0级作用域
			
		// 闭包
			// 一个封闭的不公开的包裹结构或空间
			
			// 在函数内部的数据无法直接在函数外部进行访问
			
			// 在函数内部创建函数,进行返回return
			// 由于作用域链的作用,函数内部的函数可以访问该函数中的数据,
			// 所以在这个函数外部,使用该函数内部创建的这个函数,就可间接操作该函数
			// 里的数据
			
			// 闭包的基本模型
			function foo() {
				var data = "";
				
				return function() {
					return data;
				}
			}
			var f = foo();
			f();
			// 如何返回多个数据
			// 在闭包中,返回一个对象,对象中包含多个方法,对这个函数内部
			// 的多个变量进行操作
			
			
    </script>
</head>
<body>

</body>
</html>